import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-12-18
 * Time: 9:22
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的用户名和密码
        //设置编码格式,保证服务器这里能够获取到正确的参数
        req.setCharacterEncoding("utf8");
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");
        if(userName == null || userName.equals("") || passWord == null || passWord.equals("")){
            //用户名/密码为空登录失败
            resp.setContentType("text/html ; charset=utf8");
            resp.getWriter().write("用户名密码为空登入失败");
            return;
        }
        //2.用户名密码和数据库里的用户名和密码进行验证
        UserDao userDao = new UserDao();
        User user = userDao.selectByName(userName);
        if(user == null || !user.getPassWord().equals(passWord)){
            //用户名不存在或者密码错误
            resp.setContentType("text/html ; charset=utf8");
            resp.getWriter().write("用户名密码错误登入失败");
            return;
        }
        //3.用户名密码正确,创建会话
        HttpSession session = req.getSession(true);
        //在会话中保存一下user对象,以备后面使用,后序访问其他页面,就可以直接通过会话拿到当前是哪个用户在访问了
        session.setAttribute("user",user);
        //4.302 重定向到blog_list页面
        resp.sendRedirect("blog_list.html");

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用doget方法来对当前的登录状态进行判定
        //1.获取一次当前的会话
        HttpSession session = req.getSession(false);
        if(session == null){
            //没有会话
            resp.setStatus(403);
            return;
        }
      User user = (User) session.getAttribute("user");
        if (user == null){
            //有会话,但是user为空(session对象也是一个键值对),也认为没有登入
            //是会出现session存在user不存在的情况的---注销
            resp.setStatus(403);
            return;
        }
        //2.已经是登录状态,什么都不用做,返回200这样的响应即可
        //默认是200,不写也行
        resp.setStatus(200);
    }
}
